39#ifndef WOLF_AUTODIFF_PUBLIC_INTERNAL_JET_TRAITS_H_
40#define WOLF_AUTODIFF_PUBLIC_INTERNAL_JET_TRAITS_H_
53template <
typename... Types>
56template <
typename T,
typename... Types>
59template <
typename T,
int N,
typename... Types>
63template <
typename... Types>
67template <
typename T,
typename E =
void>
72template <
typename T,
int N>
83template <
typename T1,
typename... Types>
84inline constexpr bool AreAllSame_v = (std::is_same<T1, Types>::value && ...);
90template <
typename T,
typename E =
void>
91struct Rank : std::integral_constant<int, -1> {};
95struct Rank<T,
std::enable_if_t<std::is_scalar<T>::value>>
96 : std::integral_constant<int, 0> {};
99template <
typename T,
int N>
100struct Rank<
Jet<T, N>> : std::integral_constant<int, N> {};
107template <
typename... Types>
108using Ranks_t = std::integer_sequence<int, Rank_v<Types>...>;
112constexpr decltype(
auto)
AsScalar(T&& value)
noexcept {
113 return std::forward<T>(value);
118template <
typename T,
int N>
133template <
typename... Types>
139 internal::AreAnyJet_v<Types...> &&
141 internal::AreAllSame_v<internal::UnderlyingScalar_t<Types>...> &&
143 internal::IsEmptyOrAreAllEqual_v<internal::RemoveValue_t<internal::Ranks_t<Types...>, 0>>
150template <
typename T,
int N>
172template <
typename... Types>
183template <
typename... Types>
189 internal::AreAnyJet_v<Types...> &&
191 internal::IsEmptyOrAreAllEqual_v<internal::RemoveValue_t<internal::Ranks_t<Types...>, 0>>
203template <
typename... Types>
std::integer_sequence< int, Rank_v< Types >... > Ranks_t
Definition: jet_traits.h:108
typename UnderlyingScalar< T >::type UnderlyingScalar_t
Definition: jet_traits.h:77
constexpr decltype(auto) AsScalar(T &&value) noexcept
Definition: jet_traits.h:112
constexpr bool AreAnyJet_v
Definition: jet_traits.h:64
constexpr int Rank_v
Definition: jet_traits.h:104
constexpr bool AreAllSame_v
Definition: jet_traits.h:84
Definition: integer_sequence_algorithm.h:50
constexpr bool CompatibleJetOperands_v
Definition: jet_traits.h:173
constexpr bool PromotableJetOperands_v
Definition: jet_traits.h:204
Definition: jet_traits.h:146
Definition: jet_traits.h:54
Definition: jet_traits.h:91
Definition: jet_traits.h:68
T type
Definition: jet_traits.h:69